package face.link;

/**
 * @author spf
 * @date 2024/9/6
 * @time 0:11
 */

/**
 * 我的链表
 */
public class MyLinkedList {
    //链表长度
    private int size;
    //单链表节点
    private ListNode head;

    /**
     * 单链表数据结构
     */
    class ListNode {
        int val;
        ListNode next;

        public ListNode(int val) {
            this.val = val;
            this.next = null;
        }
    }

    public MyLinkedList() {
        size = 0;
        head = new ListNode(0);
    }

    // 获取链表中下标为 index 的节点的值。如果下标无效，则返回 -1 。
    public int get(int index) {
        if (index < 0 || index >= size) {
            return -1;
        }
        ListNode h = head;
        for(int i=0;i<=index;i++){
            h=h.next;
        }
        return h.val;
    }

    /**
     *  将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后，新节点会成为链表的第一个节点。
     * @param val
     */
    public void addAtHead(int val) {
        ListNode a = new ListNode(val);
        head.next = a;
    }

    public void addAtTail(int val) {

    }

    public void addAtIndex(int index, int val) {

    }

    public void deleteAtIndex(int index) {

    }
}
